package com.lzh.farmersshop.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;

/**
 * @Class CustomInterceptor
 * @Author ShiChaojie
 * @Email:scj0725@qq.com
 * 自定义的拦截器类 - 实现 HandlerInterceptor 接口
 */
@Component
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        System.out.println("请求拦截器 - 在请求处理之前调用");
        // 获取请求的URI
        String requestURI = request.getRequestURI();

        // 定义静态资源的路径前缀
        List<String> staticResourcePrefixes = Arrays.asList("/static/", "/admin/css/", "/admin/js/", "/admin/font/", "/admin/fonts/", "/admin/images/", "/admin/lib/");

        // 检查是否是静态资源，如果是则放行
        for (String prefix : staticResourcePrefixes) {
            if (requestURI.startsWith(prefix)) {
                return true; // 放行静态资源
            }
        }

        // 定义放行的路径列表
        List<String> allowedPaths = Arrays.asList("/admin/login", "/admin/admininfo/login", "/admin/admininfo/logout");

        // 检查是否访问的是admin页面，如果是则检查登录状态
        if (requestURI.startsWith("/admin") && !allowedPaths.contains(requestURI)) {
            // 在这里添加检查用户是否已登录的逻辑，您可以使用Session或其他方式进行用户认证
            // 示例检查：假设存在名为isLoggedIn的Session属性来表示登录状态
            if (request.getSession().getAttribute("admininfo") == null) {
                // 如果未登录，重定向到登录页面或其他页面
                response.sendRedirect("/admin/login"); // 这里假设登录页面的路径为/login
                return false; // 拦截请求，不允许访问admin页面
            }
        }

        // 其他页面不需要登录即可访问，放行
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        System.out.println("请求拦截器 - 在请求处理之后调用，但在视图被渲染之前");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        System.out.println("请求拦截器 - 在请求处理完成后调用");
    }
}
